package ig.formato.conection.util;

import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.File;
import java.io.OutputStream;
import java.util.Properties;

/**
 * @author Jimmy Sancchez
 *
 * Clase utilizada para cargar propiedades desde un archivo .properties 
 */
public class LoadProperties {

    private static Properties props = null;
    private static File f = null;
    private static String msg = null;

    /**
     * este metodo carga en un property  cada una de la propiedades que existan en un
     * archivo .property especificado.
     * 
     * @param file: la ruta del archovo a cargar
     */
    private static void loadProperties(String file) {
        props = new Properties();//para cargar propiedades de un archivo 
        f = new File(file);
        if (f.exists()) {
            try {
                InputStream is = new BufferedInputStream(new FileInputStream(f));
                props.load(is);
                is.close();
            } catch (Exception e) {
                System.out.println("No se pudo leer el archivo de propiedades.");
            }
        }
    }

    /**
     * carga cada uno de las propiedades desde un archivo de propiedades y retorna un
     * property con cada una de la propiedades cargadas.
     * 
     * @param file: la ruta del archivo de propiedades a cargar
     * @return: las propiedades en un property.
     */
    public static Properties loadPropertiess(String file) {
        props = new Properties();//para cargar propiedades de un archivo 
        f = new File(file);
        String msg = null;
        if (f.exists()) {
            try {
                InputStream is = new BufferedInputStream(new FileInputStream(f));
                props.load(is);
                is.close();
            } catch (Exception e) {
                System.out.println("No se pudo leer el archivo de propiedades.");
            }
        }//if
        return props;
    }

    /**
     * almacena en un archivo todas la propiedades que existan en un property
     * 
     * @param prop: es el property con las propiedades a almacenar.
     * @param file: la ruta del archivo en donde se almacenaran las propiedades
     * @param comentario: es una linea de caracteres que se adiciona al principio del archivo de propiedades como un comentario
     * @return
     */
    public static boolean storePropertiess(Properties prop, String file, String comentario) {
        f = new File(file);
        //if (f.exists()) {
        try {
            OutputStream os = new BufferedOutputStream(new FileOutputStream(f));
            prop.store(os, comentario);
            os.close();
        } catch (Exception e) {
            System.out.println("No se pudo Guardar las propiedades.");
            return false;
        }
        return true;
    }

    /**
     * Retorna el valor asociado al parametro "cadena" qeu se encuentra el archivo .properties
     * 
     * @param cadena el nombre de la propiedad que se quiere cargar
     * @return valor asociado al parametro "cadena"
     */
    public static String getProperties(String file, String cadena) {
        loadProperties(file);
        msg = props.getProperty(cadena);
        return msg;
    }
}